/*
 * @Author: 严晗 823841034@qq.com
 * @Date: 2023-10-08 14:09:13
 * @LastEditors: 严晗 823841034@qq.com
 * @LastEditTime: 2023-10-21 16:06:53
 * @FilePath: /yike-admin/Users/yanhan/vite-project/src/router/index.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { createRouter, createWebHashHistory } from 'vue-router'
// import { routes, asyncRoutes } from './basic'

// 基础路由
const routes = [
	{
		path: '/',
		name: 'layout', // 定义name参数，方便添加动态路由
		component: () => import('~/layout/index.vue'),
		children: [
			{
				// 默认首页路由
				path: '/',
				name: '首页',
				component: () => import('~/pages/index.vue'),
			},
		],
	},
	{
		path: '/:pathMatch(.*)*',
		name: 'notfound',
		component: () => import('~/pages/error/404.vue'),
	},
	{
		path: '/login',
		name: 'login',
		component: () => import('~/pages/login/index.vue'),
	},
]

// 注册路由
export const router = createRouter({
	history: createWebHashHistory(),
	routes,
})

// 动态添加路由，传入后端接口中的路由数据
export function addRoutes(menus) {
  // 拿到上面的默认路由配置数据routes
  let currentRoutes = router.options.routes
	// 是否是新增加的路由
	let hasNewRoutes = false
	const findRoute = (arr) => {
    // 动态路由中的component，需要先获取到pages中的所有文件
    let modules = import.meta.glob('../pages/**/*.vue')
		arr.forEach((f) => {
      // 根据name判断是否已经保存在路由配置中了
			let item = currentRoutes.some((o) => o.name == f.name)
      // 没有的时候才去进行添加路由操作
			if (!item) {
        let temp = {
          path: `${f.path}`,
          name: f.name,
          meta: {
            title: f.name,
						keepAlive: Number(f.keepAlive) === 1
          },
          component: modules[`../pages${f.path}.vue`],  // modules获取到之后，才能使用动态配置的component
        }
        currentRoutes.push(temp)
        // 添加动态路由
				router.addRoute("layout", temp)
				hasNewRoutes = true
			}

			// 继续判断是否存在子路由 children
			if (f.children && f.children.length) {
				// 存在的时候，继续调用当前方法进行递归操作
				findRoute(f.children)
			}
		})
	}
	findRoute(menus)
	return hasNewRoutes
}
